在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。
緣起:
在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。
名詞解釋:
首先再開始介紹怎麼設計之前,先來說明一下兩個名詞:【驗證(authentication)】與【授權(authorization)】
(ps.小喵標上英文不是英文教學、也不是騷包賣弄,這會在Web.Config裡面用得到的兩個Tag唷)
驗證(authentication):身分檢查,例如:查驗帳號密碼是否正確
授權(authorization):權限檢查,查看是否有該畫面或資料夾的權限
說明順序
接著開始介紹ASP.NET的機制,小喵會依照以下的步驟來介紹。
精靈:使用精靈產生驗證、授權機制
機制:了解精靈產生後,預設首頁、登入頁面、拒絕匿名存取、登入後畫面導向,透過實際運作了解這些代表的意義
精靈幫我們做了什麼:Web.Config內的【驗證(authentication)】與【授權(authorization)】設定
搭配自己的使用者資料庫:改寫使用自己的資料庫
精靈
首先用精靈的方式來設定【驗證】與【授權】的相關機制,這個部分小喵把過程錄製下來,請參考
http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin01.html
機制
接著介紹一下這樣的方式,有了哪些機制
在【允許匿名瀏覽】狀況下,如何讓登入、未登入瀏覽不同的訊息:這部分上面的教學已經示範了
如何設定【拒絕】【匿名使用者瀏覽】,也就是未經登入,就不允許瀏覽該畫面
匿名存取,登入後,轉回剛剛的畫面。(這部分是自動的,不必任何設定預設就是這樣)
如何設定【只允許】【特定角色瀏覽】
以上這些機制的設定,測試示範,請參考以下的錄影
http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin02.html
精靈幫我們做了什麼
我們使用精靈,可以幫我們設定了這些東西,那麼到底精靈幫我們做了些什麼??事實上他幫我們修改了Web.config的一些設定。我們接著就來一一來說明
1.登入驗證方式:從區域網路(Windows)、從網際網路(Forms)
在Web.Config中找到authentication的設定,預設為Windows,剛剛改成【從網際網路】,這裡被改為【Forms】
<authentication mode="Forms" />
2.登入頁面設定:設定登入的畫面是哪一個aspx,預設為Login.aspx
登入後預設首頁:如果從登入畫面進入系統,登入成功後預設要轉到哪一頁(如果沒有設定,預設會轉到Default.aspx)
這兩個部分精靈並不會幫我們改,不過我們可以手動得更改,找到<authentication mode="Forms" />將之改為以下這樣:(請注意,Web.config的英文字母大小寫必須撰寫正確唷!!)這樣更改後,系統要登入時就會找設定的myLogin.aspx來當作驗證
<authentication mode="Forms" >
<forms defaultUrl="myDefault.aspx" loginUrl="myLogin.aspx" ></forms>
</authentication>
4.設定系統必須登入才能瀏覽(根目錄設定【拒絕匿名使用者】)
a.可以在Web.Config中找到授權的設定如下:
<authorization>
<deny users="?" />
</authorization>
b.deny:拒絕
c.allow:允許
d.users="?"代表匿名使用者
e.users="*"代表所有使用者
5.資料夾設定特定角色瀏覽:
重新整理專案後,會發現,Admin與Mem資料夾都多了Web.Config,設定該資料夾的【授權】就在該資料夾中的Web.Config,我們分別來看
a.在設定裡面,越上方的越優先
b.Admin:
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
c.Mem:
<configuration>
<system.web>
<authorization>
<allow roles="Member" />
<deny users="*" />
</authorization>
</system.web>
</configuration>